//
//  CZTabBar.swift
//  WH01
//
//  Created by Apple on 16/7/8.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit

//  定义代理协议
protocol CZTabBarDelegate: NSObjectProtocol {
    func didSelectedComposeButton()
}

class CZTabBar: UITabBar {

    //  点击撰写按钮执行的闭包
    var composeButtonClosure: (()->())?
    
    //  不能用delegate，因为系统里面有这个属性了,使用代理的时候也需要使用弱引用, 这个协议必须继承NSObjectProtocol否则不能使用weak
    weak var czDelegate: CZTabBarDelegate?
    
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        //  添加点击事件
        button.addTarget(self, action: "composeButtonAction", forControlEvents: .TouchUpInside)
        //  设置图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        //  设置背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        
        button.sizeToFit()
        return button
        
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    //  加载xib或者storyboard的时候回调用此方法，下面的提示是我们没有实现这个方法
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //  添加视图
    private func setupUI() {
    
        addSubview(composeButton)
    }
    
    //  调整子控件的frame
    override func layoutSubviews() {
        super.layoutSubviews()
        //  设置按钮的中心点
        composeButton.centerX = width * 0.5
        composeButton.centerY = height * 0.5
        
        //  设置按钮的宽度
        let itemWidth = width / 5
        //  记录遍历到第几个系统的按钮
        var index = 0
        //  调整系统控件的位置及大小
        for value in subviews {
            //UITabBarButton 系统私有的类，不能直接使用
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!) {
                
                value.width = itemWidth
                value.x = CGFloat(index) * itemWidth
                index++
                //  将要显示搜索按钮的时候多加一个宽度，隔过去中间的加号按钮
                if index == 2 {
                    index++
                }
                
                
            }
        }
        
        
        
        
    }
    
    // MARK:    - 点击事件
    //  因为swift是编译型语言，在编译的时候就需要知道调用哪个函数，使用private关键字修饰的函数在运行循环里面找不到，就崩溃了
    //  解决办法 使用@objc，告诉系统我们使用oc动态运行机制调用这个函数，也就是使用oc里面动态想对象派发消息，基于动态运行时
    @objc private func composeButtonAction() {
        
        //  执行闭包
        composeButtonClosure?()
        
        //  代理调用
        czDelegate?.didSelectedComposeButton()
        
    }
    
    
    
    
    
    
    
    
    
    

}
